package com.sgl.controller;

import com.sgl.entity.AcceptPayOrder;
import com.sgl.service.AcceptPayOrderService;
import com.sgl.service.DictService;
import com.sgl.util.StringSingUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;


@Controller
@RequestMapping("/merchant/api")
public class CreatPayController {
    private static final Log log = LogFactory.getLog(CreatPayController.class);


    @Autowired
    DictService dictService;

    @Autowired
    AcceptPayOrderService acceptPayOrderService;

    /**
     * 创建订单的接口
     *
     * 接受到创建订单请求之后 return 到pay 页面 自动提交订单 到支付系统
     *
     * @param pay_secid  通道id 即商户id
     * @param pay_orderid crm订单id
     * @param pay_mtlogin mt5 账号 用于传到支付系统 以及 回调订单列表的财务统计
     * @param pay_dollor 预计入金金额 美金
     * @param pay_amount  人民币
     * @param pay_notifyurl 异步通知地址  回调通知地址以每次接收的为准，但系统都有默认的
     * @param pay_returnurl 同步通知地址 基本不用 因为此系统没有同步通知
     * @param pay_sign 签名
     * @param req
     * @param model
     * @return
     */
    //crm下单
    @RequestMapping("/create")
    public String creatPay(String pay_secid,String pay_orderid,String pay_mtlogin,String pay_dollor,String pay_amount,String pay_notifyurl,
                           String pay_returnurl,String pay_sign,
                           HttpServletRequest req, Model model){
        Map<String, String> parameter = new LinkedHashMap<>();
        parameter.put("pay_secid",pay_secid);
        parameter.put("pay_mtlogin",pay_mtlogin);
        parameter.put("pay_orderid",pay_orderid);
        parameter.put("pay_dollor",pay_dollor);
        parameter.put("pay_amount",pay_amount);
        parameter.put("pay_notifyurl",pay_notifyurl);
        parameter.put("pay_returnurl",pay_returnurl);

        //验证签名
        String sign= StringSingUtils.getSign2(parameter,dictService.findByKeywords("secretKey").getValue());
        //log.info("开始验证签名============");
        //log.info("paysign===>"+pay_sign+"=======sign==>"+sign);
            if (sign.equals(pay_sign)){
        //log.info("验证签名通过============");
            SimpleDateFormat sd=new SimpleDateFormat("yyyyMMddHHmmss");
            String merOrderId = parameter.get("pay_orderid");
            String amount =parameter.get("pay_amount");
            String subTime=sd.format(new Date());
            parameter.get("pay_notifyurl");
            parameter.get("pay_returnurl");
            Map<String, String> parameters = new HashMap<>();
                //log.info("开始创建下单球请求============");
            //开始创建下单球请求
            //parameters.put("merchantId",dictService.findByKeywords("merchantId").getValue());
            parameters.put("merchantId",parameter.get("pay_secid"));
            parameters.put("merOrderId",merOrderId);//商户订单号,必须唯一
            parameters.put("account", parameter.get("pay_mtlogin"));					  //crm账号
            parameters.put("amount", amount);							  //示例金额
            parameters.put("subTime", subTime);
            String sign2= StringSingUtils.getSign(parameters,dictService.findByKeywords("secretKey").getValue());
            String creatUrl=dictService.findByKeywords("actionUrl").getValue();
            parameters.put("sign", sign2);
            parameters.put("actionUrl",creatUrl);
                model.addAttribute("paramMap",parameters);
            //return "pay";
            // modelMap.addAttribute("msg","验签成功");
            //log.info("开始存储订单信息");
            AcceptPayOrder order = new AcceptPayOrder();
            order.setPaySecid(pay_secid);
            order.setPayMtlogin(pay_mtlogin);
            order.setPayOrderid(pay_orderid);
            order.setPayDollor(pay_dollor);
            order.setPayAmount(pay_amount);
            order.setPayNotifyurl(pay_notifyurl);
            order.setPayReturnurl(pay_returnurl);
            order.setCreateTime(new Date());
            order.setSign(pay_sign);
            Integer integer = acceptPayOrderService.insertPayOrder(order);
            if (integer!=null){
                    log.info("===========新建了一笔来自crm的入金请求。。。=========");
            }
            return "pay";
        }
        model.addAttribute("msg","签名错误");
        return "error";
    }
}
